<?php namespace Admin\Controller;

class ArticleController extends CommonController{
	// 设置一个私有属性为了接受实例化对象
	private $model;
	public function __construct(){
		parent::__construct();
		// 实例化模型Article类
		$this->model = new \Admin\Model\Article;
	}
	// 以下为显示默认页面的方法
	public function index(){
		// 计算文章的总数，赋值给变量$count，该变量的作用为make里的参数
		$count = Db::table('article')->where('is_recycle=0')->count();
		// 设置一个变量row，该变量的作用为分页的row参数，之所以要单独拿出来作为一个变量是因为该变量可以用于后续的判断
		$row = 5;
		// 使用框架的分页方法，将结果赋予变量$page，然后将该变量分配到页面
		$page = Page::row($row)->make($count);
		// 由于该页面需要用到两个表的数据来显示，所以在这里将两个表关联起来，直接使用框架的数据库方法关联而不建模型是因为只需要调用一次，建立视图模型的话反而更加麻烦，如果该控制器有多次调用到该关联表的话则可以考虑建一个视图模型
		$data = Db::table('article')->join('category','category_cid','=','cid')->where('is_recycle=0')->limit(Page::limit())->field('aid,cname,title')->get();
		if($count>$row){//如果文章总数少于分页显示条数的设定值的话，则将变量$paga赋值为空，这样做的目的是为了在页面只有一个分页的情况下，不显示“上一页”“下一页”按钮
			View::with('page',$page);
		}else{
			View::with('page',"");
		}
		// 分配资源，显示页面
		View::with('data',$data);
		View::make();
	}
	// 该方法的作用为:检测是否有post提交动作，如果有则调用模型中自定义的方法addData进行数据添加，判断该方法返回的值来判断是否添加成功，再弹出对应的提示语言
	public function add(){
		if (IS_POST) {
			if($this->model->addData())View::success('添加成功',U('index'));
			View::error($this->model->getError());
		}
		// 以下是获取旧数据，为了在页面遍历出标签和下拉菜单
		// 实例化分类模型为了取到分类模型的数据
		$cateModel = new \Admin\Model\Cate;
		$cateData = Data::tree($cateModel->get(),"cname");
		// 实例化标签模型，为了去到标签数据
		$tagModel = new \Admin\Model\Tag;
		$tagData = $tagModel->get();
		// 将数据分配到页面
		View::with("tagData",$tagData);
		View::with("cateData",$cateData);
		// 显示页面
		View::make();
	}
	// 以下方法的作用：回收站方法，该页面与index方法一样有分页，除了参数is_recycle=1不一样之外，其他全部相同。is_recycle该字段标示一篇文章是否在回收站，在回收站的文章可以执行永久删除或者恢复
	public function recycle(){
		// 计算文章的总数，赋值给变量$count，该变量的作用为make里的参数
		$count = Db::table('article')->where('is_recycle=1')->count();
		// 设置一个变量row，该变量的作用为分页的row参数，之所以要单独拿出来作为一个变量是因为该变量可以用于后续的判断
		$row = 5;
		$page = Page::row($row)->make($count);
		// 由于该页面需要用到两个表的数据来显示，所以在这里将两个表关联起来，直接使用框架的数据库方法关联而不建模型是因为只需要调用一次，建立视图模型的话反而更加麻烦，如果该控制器有多次调用到该关联表的话则可以考虑建一个视图模型
		$data = Db::table('article')->join('category','category_cid','=','cid')->where('is_recycle=1')->limit(Page::limit())->field('aid,cname,title')->get();
		if($count>$row){
			View::with('page',$page);
		}else{
			View::with('page',"");
		}
		// 分配数据，显示压面
		View::with('data',$data);
		View::make();
	}
	// 以下为删除方法，该方法主要是通过操作文章表的is_recycle为1来实现
	public function del(){
		// 通过get获取aid
		$aid = Q('get.aid');
		// 通过框架的数据库的方法更新is_recycle字段的值为1，表示文章在回收站内
		Db::table('article')->where("aid=$aid")->update(array('is_recycle'=>1));
		go(U('index'));
	}
	// 以下为删除方法，该方法主要是通过操作文章表的is_recycle为0来实现
	public function recover(){
		// 通过get获取aid
		$aid = Q('get.aid');
		// 通过框架的数据库的方法更新is_recycle字段的值为0，表示文章不在回收站内
		Db::table('article')->where("aid=$aid")->update(array('is_recycle'=>0));
		go(U('recycle'));
	}
	// 真正删除文章，调用了模型内的自定义方法del
	public function realDel(){
		$this->model->del();
	}
	// 该方法的作用是编辑文章，编辑文章的页面需要遍历显示标签和分类下拉框，所以需要先将分类数据和tag数据取得，而然需要在表单内填上旧数据，而旧数据涉及到文章的三张表，所以先将这三张表的内容关联起来取到所有信息的总和。最后在加上IS_POST判断用户是否有提交动作，如果有，就将这些数据通过自定义的方法editData更新数据库
	public function edit(){
		if (IS_POST) {//判断用户是否有提交动作，如果有，就将这些数据通过自定义的方法editData更新数据库
			if ($this->model->editData())View::success('修改成功',U('index'));
			View::error($this->model->getError());
		}
		// 通过get取得aid，该参数在后续where条件中需要使用
		$aid = Q('get.aid');
		// 将文章表相关的三张表的内容关联起来取到所有信息的总和
		$oldData = Db::table('article')->join('article_data','aid','=','article_aid')->field('aid,title,author,category_cid,des,keywords,content,digest,thumb')->where("aid=$aid")->get();
		// 实例化文章标签中间表，为了取的文章的旧标签记录，得到的数据是一个数组，将该数组重新组合后遍历添加（在添加之前需要将旧tag全部删除）
		$oldtagModel = new \Admin\Model\article_tag;
		$oldtag = $oldtagModel->where("article_aid=$aid")->lists('tag_tid');
		$oldtag = is_array($oldtag)? $oldtag : array();
		// 以下是标签和分类数据，为了在页面显示出来
		$cateModel = new \Admin\Model\Cate;
		$cateData = Data::tree($cateModel->get(),"cname");
		$tagModel = new \Admin\Model\Tag;
		$tagData = $tagModel->get();
		// 将以上的数据分配到网页中并显示页面
		View::with("oldData",$oldData[0]);
		View::with("oldtag",$oldtag);
		View::with("tagData",$tagData);
		View::with("cateData",$cateData);
		View::make();
	}


}

 ?>